package com.season.seasonStudy.javase.j_021_io;

import com.season.seasonStudy.demo.Emp;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Properties;


public class TestDrive {
	
	static Properties props;
	static{
		try (FileReader read=new FileReader(new File("src/jdbc.properties"));){
			props=new Properties();
			props.load(read);
			Class.forName(props.getProperty("oracle.driverClass"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	/*
	 * 包：java.io
	 *  File 文件和文件夹的管理
	 *  
	 *  方法递归调用：利用方法重复调用
	 *  		方法内部调用自己，在某种条件下不调用自己，从这开始退出
	 *  1+2+3+4+5+6+7+8+9+10
	 *  f(1)=1;
	 *  f(2)=2*f(1);
	 *  f(3)=3*f(2);
	 *  f(n)=n*f(n-1);
	
	 * 文件读写：IO
	 * 	 程序角度：
	 * 		input   输入 读文件到java程序 
	 * 	    output  输出 从java程序内容写入到文件
	 * 	stream：信息通道
	 * 		字符流 char
	 * 			Reader
	 * 			Writer
	 * 		字节流 byte
	 * 			InputStream
	 * 			OutputStream		
	 * 
	 * 	增强流：	
	 * 输出字符或字节
	 * 	PrintStream    
	 * 	out=PrintStream(new FileOutputStream(des,false));
	 * 				out.print//写入文件末尾不换行
	 * 				out.println();//写入文件一行
	 *  读字符
	 * 	BufferedReader
	 *  in= new BufferedReader(new FileReader(new File("")));
	 *  			in.readLine();//读一行，返回数据，返回null表示结束
	 *  				注意：读取的数据不包含换行符
	 *  读取properties文件
	 *   Properties props=new Properties();集合（字符串 键，值）
		 FileReader read=new FileReader(
		 			new File(properties文件地址));
		  props.load(read);//加载properties文件到集合中
	 * 	  props.getProperty("键");//根据键从props集合中取出对应值
	 * 
	 * 	properties 文件 内部的写法：
	 * 		key=value  注意等号左右的键和值都不要带空格
	 * 
	 * 1 使用IO读文件到程序 获取模板数据                   
	 *   使用IO  bufferedReader完成读文件到字符串
	 * 2 从数据使用jdbc 获取编号是7499员工         
	 *   使用  EmpDao根据主键查询对象获取
	 * 3 使用字符串replaceAll("\\$\\{name\\}",
	 * 				"替换成的数据")方法将数据替换成 员工数据
	 * 	  使用EmpVo根据emp对象和查出的模板 替换模板数据
	 * 4 显示员工数据   使用 EmpVo员工数据
	 */
	public static void main(String[] args) {
//		EmpDao ed=new EmpDao();
//		Emp e=ed.findOne(7499);
//		System.out.println(e.getEmpno()+","+e.getEname()+","
//						+e.getSal()+","+e.getHiredate());
//		String data=read(new File("src/adf.txt"));
//		System.out.println(data);
//		data=data.replaceAll("\\$\\{name\\}", e.getEname())
//		.replaceAll("\\$\\{born\\}", e.getHiredate().toString())
//		.replaceAll("\\$\\{sal\\}", String.valueOf(e.getSal()));
//		System.out.println(data);
	}
	public static boolean move(File resource,File des){
		if(copy(resource,des)){
			return resource.delete();
		}
		return false;
	}
	public static boolean copy(File resource,File des) {
		PrintStream out=null;
		DataInputStream br=null;
		try {
			 br=new DataInputStream(new FileInputStream(resource)) ;
			 out=new PrintStream(new FileOutputStream(des,false)) ;
			 byte [] b=new byte[2048];
			 while(true){
				int len=br.read(b);
				 if(len==-1)
					 break;
				 out.write(b);
			 }
			 return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try {
				if(out!=null)
					out.close();
				if(br!=null)
					br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return false;
	}

	
	public static void write(String content,
									File desc,boolean isAppend) {
		PrintStream out=null;
		try {
			 out=new PrintStream(new FileOutputStream(desc,isAppend));
			out.println(content);
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			if(out!=null)
				out.close();
		}
	}
	public static String read(File resource) {
		BufferedReader in=null;
		StringBuffer sbf=new StringBuffer();
		FileReader fi=null;
		try {
			fi=new FileReader(resource);
			 in= new BufferedReader(fi);
			while(true){
				String data=in.readLine();
				if(data==null)
					break;
				sbf.append(data+"\n");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
				try {
					if(fi!=null)
						fi.close();
					if(in!=null)
						in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
		return sbf.toString();
	}
	
	public static void mainWriter(String[] args) {
		FileWriter output=null;
		try {
			output=new FileWriter(new File("src\\adf1.txt"),true);
			 String content="hello world3\nhe";
			 output.write(content);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		finally{
			try {
				if(output!=null)
					output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void mainOutput(String[] args) {
		FileOutputStream output=null;
		try {
			output=new FileOutputStream(new File("src\\adf1.txt"));
			 String content="hello world\nhello";
			 output.write(content.getBytes());
		} catch (Exception e) {
			e.printStackTrace();
		} 
		finally{
			try {
				if(output!=null)
					output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void mainReader(String[] args) {
		FileReader input=null;
		try {
			 input=new FileReader(new File("src\\adf.txt"));
			/*while(true){
				int data=input.read();//获取一个字节的数据，-1表示到文件尾
				if(data==-1)
					break;
				System.out.print((char)data);
			}*/
			 char[] b=new char[10];
			while(true){
				int length=input.read(b);//获取一个字节的数据，-1表示到文件尾
				if(length==-1)
					break;
				System.out.print(new String(b,0,length));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		finally{
			try {
				if(input!=null)
					input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void mainInput(String[] args) {
		FileInputStream input=null;
		try {
			 input=new FileInputStream(new File("src\\adf.txt"));
			/*while(true){
				int data=input.read();//获取一个字节的数据，-1表示到文件尾
				if(data==-1)
					break;
				System.out.print((char)data);
			}*/
			 byte[] b=new byte[4096];
			while(true){
				int length=input.read(b);//获取一个字节的数据，-1表示到文件尾
				if(length==-1)
					break;
				System.out.print(new String(b,0,length));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		finally{
			try {
				if(input!=null)
					input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	static int num;
	public static void showTree(File f){
		if(f.exists()){
			for (int i = 0; i <num; i++) {
				System.out.print("  ");
			}
			System.out.println(f.getName());
		}
		if(f.isDirectory()){
			File[] arr=f.listFiles();
			if(arr!=null){
				for (File file : arr) {
					num++;
					showTree(file);
					num--;
				}
			}
		}
	}
	public static void show(int num){
		System.out.println("进入"+num++);
		if(num<=5){
			show(num);
		}
		System.out.println("退出"+(--num));
	}
	public static int f(int n){
		if(n==1)
			return 1;
		else
			return n+f(n-1);
	}
	public static void main1(String[] args) {
		showTree(new File("c:\\"));
	}
	public static void delete(File f){
		if(f.exists()){
			if(f.isDirectory()){
				File[]arr=f.listFiles();
				if(!(arr==null||arr.length==0)){
					for (File file : arr) {
						delete(file);
					}
				}
			}
			f.delete();
		}
		else{
			System.out.println("地址不存在");
		}
	}
	public static void main2(String[] args) {
		File f=new File("src\\ww\\xx");
		//System.out.println(f.mkdirs());//创建多级不存在目录
		//System.out.println(f.mkdir());//创建最后一级目录，前面目录必须存在
		//System.out.println(f.delete());//删除当前文件 或 空文件夹，返回成功和失败
		/*System.out.println("是否存在："+f.exists());
		System.out.println("是否文件："+f.isFile());
		System.out.println("是否文件夹："+f.isDirectory());
		System.out.println("绝对地址："+f.getAbsolutePath());
		System.out.println("文件或文件夹名称："+f.getName());
		System.out.println("文件地址"+f.getPath());
		System.out.println("文件大小："+f.length());
		//System.out.println(f.getAbsoluteFile().getParentFile().getParentFile().getParentFile().getParentFile().getParentFile());
		File[] arr=f.listFiles();
		for (File string : arr) {
			if(string.isFile())
				System.out.println("文件："+string.getPath());
			if(string.isDirectory())
			{
				System.out.println("文件夹："+string.getPath());
				String[] name=string.list();
				for (String string2 : name) {
					System.out.println("子目录："+string2);
				}
			}		
		}*/
	}

}
